home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / demos / e-q / mand2000demo / arexx / dopanels.mnd2 < prev    next >
Text File  |  1978-06-29  |  9KB  |  243 lines

  1. /* This script is supplied with the Mand2000 demo and release */
  2. /* versions and may be freely distributed. */
  3. /* Copyright 1993 Cygnus Software. */
  4.  
  5. /* An ARexx program for creating image panels, to allow calculation */
  6. /* of much higher resolution images for printing. */
  7.  
  8. /*
  9.     The  maximum size of images that Mand2000 can calculate is set
  10. only by the amount of CHIP (graphics) memory on your Amiga.  Currently
  11. the  amount  of  CHIP  memory  varies  from  512K up to 2MBytes.  With
  12. 2MBytes  of  CHIP  memory,  the  largest  images  you  can  create are
  13. approximately  1600x1200  at  256  colours,  or 4000x3500 in black and
  14. white.   If your memory all fragmented, or other programs are running,
  15. it  may be impossible to calculate images of this size.  Normally this
  16. is  plenty  big  enough, as these images are substantially larger than
  17. can   be   displayed  on  the  monitor  without  scrolling  the  image
  18. (autoscroll).  However if you want to print your images, perhaps using
  19. ADPro's  prefprinter  to print multi-page posters to a high-resolution
  20. laser  printer or the Primera dye-sub printer, much higher resolutions
  21. may be desirable.
  22.  
  23.     This  scripts  provides  the  solution  to this problem.  This
  24. script  will  break  a  picture  up  into a number of different panels
  25. (currently  either  4,  9,  16  or 25) and calculate these separately.
  26. These  panels  can then either be merged in ADPro (if you have lots of
  27. memory  or  GigaMem)  or  can  be printed individually and then pasted
  28. together.
  29.  
  30.     To  use this script, find the area that you are interested in,
  31. set  up  the palette and the colour mapping option, and set the screen
  32. size  to  a  nice  large size - this screen size will be used for each
  33. panel create by this script.
  34.  
  35.     Now select `Calculate Panels' from the user menu.  A requester
  36. will appear asking how many panels you would like to calculate.
  37. Select one of these options, then select the base file name.  This
  38. filename will be used for saving out the individual panels.  If you
  39. request 2x2 panels with a base name of `Work:Fractals/BlobPanels' then
  40. the individual panels will be saved to:
  41.  
  42. Work:Fractals/BlobPanels.0.0    - upper left
  43. Work:Fractals/BlobPanels.1.0    - upper right
  44. Work:Fractals/BlobPanels.0.1    - lower left
  45. Work:Fractals/BlobPanels.1.1    - lower right
  46.  
  47.     The  first  digit is the x-coordinate of the panel, the second
  48. digit is the y-coordinate of the panel.
  49.  
  50.     The  final  question  asked  by the script will be whether you
  51. wish to save graphics data or iteration data.  This is VERY important.
  52. If  you  want  to  use ADPro 2.5's Fractal2000 loader to create 24 bit
  53. data from the panels then you MUST save iteration data.  Otherwise you
  54. will almost certainly want to save graphics data.
  55.  
  56.     At  this point the script will zoom Mand2000 towards the upper
  57. left  hand  corner  of  your picture and begin calculating frames.  It
  58. will  run automatically and will continue until you exit Mand2000, you
  59. cancel  the  script  (by  selecting DoPanels from the user menu) or it
  60. finishes calculating all panels.
  61.  
  62.     While  Mand2000 is calculating panels you may freely use other
  63. windows in Mand2000, or other programs on your Amiga.
  64.  
  65.     Nifty things:  This script can be used as a flashy demo of the
  66. power   of  Mand2000's  ARexx  interface  and  of  Mand2000's  general
  67. coolness.   To  do this, set up to do panels just as normal, but use a
  68. substantially  smaller  window  - typically a non-backdrop window on a
  69. moderate  sized  screen.   Before  starting  the  script, select 'Show
  70. location'  from the project window, then zoom the show location window
  71. in  towards the location box so that the location box almost fills the
  72. window.   Now  when  the script is running you will be able to monitor
  73. its  progress  by watching the location box zipping around in response
  74. to ARexx's commands.
  75.  
  76.     Sometimes  you may have to stop panel creation and then resume
  77. it  at  a later date.  To resume panel creation, go through all of the
  78. steps  to begin creating panels, and then use the `SkipPanel' function
  79. in  the  user  menu  to  skip over those panels that have already been
  80. calculated.  This command has a keyboard shortcut to make it easier to
  81. skip over multiple panels.
  82.     */
  83.  
  84. portname = address()    /* Retrieve the current port name. */
  85. /* If the portname does not start with MAND2000 then this script must */
  86. /* have been run with rx, rather than from Mand2000.  Therefore we */
  87. /* need to set the port name.  We do not always set the port name */
  88. /* because it is better to let Mand2000 set it for us, so that */
  89. /* this script can be used with windows other than the one with */
  90. /* port name MAND2000.1. */
  91. if (left(portname, 8) ~= "MAND2000") THEN
  92.     address 'MAND2000.1'
  93.  
  94. options results
  95.  
  96.  
  97.  
  98. /* Parse out the command option.  This script is called when the */
  99. /* user wants a movie started, when the user wants a movie */
  100. /* aborted and whenever one of the pictures in the sequence is done.  */
  101.  
  102. parse arg command
  103.  
  104. command = upper(command)    /* Make sure the command is in upper case. */
  105.  
  106. if (command = START) then
  107.     CALL StartPanels()
  108. else if (command = STOP) then
  109.     CALL StopPanels()
  110. else if (command = SKIP) then
  111.     CALL SkipPanels
  112. else
  113.     CALL ContinuePanels()
  114.  
  115. Exit
  116.  
  117.  
  118. StartPanels:
  119.     OKAYN '"Mand2000 panels"' '"How many panels would you like?"' '"2x2|3x3|4x4|5x5|Cancel"'
  120.  
  121.     if (result = 0) THEN
  122.         exit
  123.  
  124.     NumRows = result + 1
  125.     NumColumns = NumRows
  126.  
  127.     REQUESTSAVEFILE 'title="Panel base name."' 'path="RAM:"' 'file="PanelFrame"'
  128.  
  129.     if (RC = 3) THEN
  130.         exit
  131.  
  132.     CALL SETCLIP("MandPanelName", result)
  133.  
  134.     OKAYN '"Mand2000 panels"' '"What type of data would you|like saved?"' '"Iterations|Graphics"'
  135.     if (result = 0) THEN
  136.         CALL SETCLIP("PanelDataType", 1)    /* Graphics. */
  137.     ELSE
  138.         CALL SETCLIP("PanelDataType", 2)    /* Iterations. */
  139.  
  140.     CALL SETCLIP("NumMandPanelRows", NumRows)
  141.     CALL SETCLIP("NumMandPanelColumns", NumColumns)
  142.  
  143.     SAVEAS "NAME=RAM:PanelTempFile" 0    /* Save the current location. */
  144.  
  145.     NEW
  146.     NewPortName = result
  147.     CALL SETCLIP("NewPortName", NewPortName)
  148.     Address value NewPortName
  149.     Requester ShowLoc On
  150.     Address
  151. /*    RequestNotify '"The extra fractal window is for graphically|displaying which panel is being calculated,|using the show location requester.  Select|the panel window from the show location|requester list to make use of this."'*/
  152.     DisplayMessage 0 0 prompt '"The extra fractal window is for graphically|displaying which panel is being calculated,|using the show location requester.  Select|the panel window from the show location|requester list to make use of this."'
  153.  
  154.     ZOOMINTOPIXEL 0 0 NumRows
  155.     ForceRecalc    /* This is put in here to clear the graphics data which is left by the */
  156.             /* ZoomInToPixel command.  This is purely for aeshetic reasons, and is */
  157.             /* needed because the data no longer corresponds with the new location. */
  158.  
  159.     GETATTR stem MYVAR
  160.  
  161.     scroll TRUNC(MYVAR.drawwidth / 2) TRUNC(-1 * MYVAR.drawheight / 2)
  162.  
  163.     CALL SETCLIP("MandPanelRow", 0)
  164.     CALL SETCLIP("MandPanelColumn", 0)
  165.  
  166.     EVENTACTION PICTUREDONE DoPanels
  167.  
  168.     /* Put a command in the user menu for controlling the panel creation. */
  169.     menu '"------------------------"'
  170.     menu '"Stop Panels"' DoPanels stop
  171.     menu '"Skip Panel"' Shortcut V DoPanels skip
  172.  
  173.     RETURN 0
  174.  
  175.  
  176.  
  177. StopPanels:
  178.     /* Tell Mand2000 not to call this script any more. */
  179.     EVENTACTION PICTUREDONE
  180.     /* Remove the `stop panels' menu. */
  181.     CLEARNMENUS 3
  182.     OPEN "FILENAME=RAM:PanelTempFile"    /* Reload the start location. */
  183.     NewPortName = GETCLIP("NewPortName")
  184.     if (NewPortName ~= "") THEN DO
  185.         DECPAUSE
  186.         REQUESTRESPONSE '"Would you like the display location|window closed?"'
  187.         IF (RC = 0) THEN DO
  188.             Address Value NewPortName
  189.             Close
  190.             Address
  191.         END
  192.         CALL SETCLIP("NewPortName", "")
  193.         INCPAUSE
  194.     END
  195.     RETURN 0
  196.  
  197.  
  198.  
  199. SkipPanels:
  200.     NumRows         = GETCLIP("NumMandPanelRows")
  201.     NumColumns      = GETCLIP("NumMandPanelColumns")
  202.     MandPanelRow    = GETCLIP("MandPanelRow")
  203.     MandPanelColumn = GETCLIP("MandPanelColumn")
  204.  
  205.     MandPanelColumn = MandPanelColumn + 1
  206.     GETATTR stem MYVAR
  207.     if (MandPanelColumn >= NumColumns) THEN DO
  208.         MandPanelColumn = 0
  209.         MandPanelRow = MandPanelRow + 1
  210.         if (MandPanelRow >= NumRows) THEN DO
  211.             call StopPanels
  212.             DECPAUSE    /* Allow Mand2000 to start calculating while this requester is up. */
  213.             REQUESTNOTIFY "All panels created."
  214.             INCPAUSE    /* Just to be tidy. */
  215.             RETURN 0
  216.             END
  217.         DO iter = 2 to NumRows
  218.             scroll TRUNC(-1 * MYVAR.drawwidth) 0
  219.             END
  220.         scroll 0 TRUNC(-1 * MYVAR.drawheight)
  221.         forcerecalc
  222.         END
  223.     else DO
  224.         scroll MYVAR.drawwidth 0
  225.         forcerecalc
  226.         END
  227.     CALL SETCLIP("MandPanelColumn", MandPanelColumn)
  228.     CALL SETCLIP("MandPanelRow", MandPanelRow)
  229.     RETURN 0
  230.  
  231.  
  232.  
  233. ContinuePanels:
  234.     MandPanelRow    = GETCLIP("MandPanelRow")
  235.     MandPanelColumn = GETCLIP("MandPanelColumn")
  236.     PanelDataType   = GETCLIP("PanelDataType")
  237.     MandPanelName   = GETCLIP("MandPanelName")
  238.     SAVEAS "NAME=" || MandPanelName || "." || MandPanelColumn || "." || MandPanelRow PanelDataType
  239.  
  240.     CALL SkipPanels
  241.  
  242.     RETURN 0
  243.